// Podstawowe operacje na acuchach  acuchy zmienne

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{
    NSAutoreleasePool  * pool = [[NSAutoreleasePool alloc] init];
    NSString  *str1 = @"To jest acuch A";
    NSString  *search, *replace;
    NSMutableString  *mstr;
    NSRange   substr;

    // Tworzenie zmiennego acucha z acucha niezmiennego

    mstr = [NSMutableString  stringWithString: str1];
    NSLog (@"%@", mstr);

    // Wstawianie znakw

    [mstr insertString: @" zmienny" atIndex: 7];
    NSLog (@"%@", mstr);

    // Dodanie znakw na kocu acucha

    [mstr insertString: @" i acuch B" atIndex: [mstr length]];
    NSLog (@"%@", mstr);

    // Mona te uy appendString bezporednio

    [mstr appendString: @" i acuch C"];
    NSLog (@"%@", mstr);

    // Usuwanie podacucha wg zakresu

    [mstr deleteCharactersInRange: NSMakeRange (16, 13)];
    NSLog (@"%@", mstr);

    // Znalezienie zakresu i uycie go do usuwania

    substr = [mstr  rangeOfString: @"acuch B i "];

    if (substr.location != NSNotFound) {
        [mstr deleteCharactersInRange: substr];
        NSLog (@"%@", mstr);
    }

    // Bezporednie ustawienie zmiennego acucha

    [mstr setString: @"To jest acuch A "];
    NSLog (@"%@", mstr);

    // Zamiana jednego zakresu znakw na inny

     [mstr replaceCharactersInRange: NSMakeRange(8, 9 )
                        withString: @"zmienny acuch "];
    NSLog (@"%@", mstr);

    // Szukanie i zamiana

    search = @"To jest ";
    replace = @"Przykadowy ";

    substr = [mstr  rangeOfString: search];

    if (substr.location != NSNotFound) {
        [mstr replaceCharactersInRange: substr
                            withString: replace];
        NSLog (@"%@", mstr);
    }

    // Znalezienie i zamiana wszystkich wystpie

    search = @"a";
    replace = @"X";

    substr = [mstr rangeOfString: search];

    while (substr.location != NSNotFound) {
        [mstr replaceCharactersInRange: substr
                            withString: replace];
        substr = [mstr rangeOfString: search];
    }

    NSLog (@"%@", mstr);

    [pool drain];
    return 0;
}